[速報] 拡張イメージスキャンが CI/CD パイプラインに組み込めるようになりました!#AWSreInvent
こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
re:Invent 2023 でラスベガスにきています。最終日のキーノートにて、 拡張イメージスキャンが CI/CD パイプラインに組み込めるようになりました!
今までどんな状態だったか
まず初めに、AWS で提供されているコンテナイメージスキャンをおさらいしてみます。
AWS では、 ECR ベーシックスキャンと、Inspector v2 を利用した拡張スキャンの2種類が提供されています。
オンデマンドスキャン
使っている DB 等、いくつか違いがあるのですが、「CI に組み込めるか?」と言った目線だと、 ベーシックスキャンはオンデマンドスキャンが可能なため、 CI に組み込めて、拡張スキャンは対応していなかったため、組み込めませんでした。
追記
厳密には組み込めたのですが、複数のサービスを組み合わせて実装するため複雑なことをしていました。そのあたりは以下のブログで話していますので、もしよろしければご覧ください。
以下は BuildSpec でベーシックスキャンを CI に組み込む際のスクリプト例です。
version: '0.2'
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
- IMAGE_TAG=$CODEBUILD_RESOLVED_SOURCE_VERSION
build:
commands:
- docker build -t $ECR_REPO_URI:latest .
- docker tag $ECR_REPO_URI:latest $ECR_REPO_URI:$IMAGE_TAG
post_build:
commands:
# レジストリへのプッシュ
- docker push $ECR_REPO_URI:latest
- docker push $ECR_REPO_URI:$IMAGE_TAG
- IMAGE_ID=$(aws ecr list-images --repository-name $ECR_REPO_NAME --query 'imageIds[?imageTag==`latest`].imageDigest' --output text)
# イメージスキャンの実施
- aws ecr start-image-scan --repository-name $ECR_REPO_NAME --image-id imageDigest=$IMAGE_ID
# ecr wait で結果を待つ
- aws ecr wait image-scan-complete --repository-name $ECR_REPO_NAME --image-id imageDigest=$IMAGE_ID
# 結果の取得
- FINDINGS=$(aws ecr describe-image-scan-findings --repository-name $ECR_REPO_NAME --image-id imageDigest=$IMAGE_ID --query 'imageScanFindings.findings' --output text)
- echo 'Check for ECR console to see vulnerability status of your image repository'
- '[ -z "$FINDINGS" ] || exit 55'
以前 LT をしたことがあるので、その他の違いについては以下をご覧ください。
今回のアップデート
今回のアップデートで、拡張スキャンも CI/CD パイプラインに組み込むことができるようになりました。
動作としては直接コンテナイメージをスキャンするのではなく、 inspector-scan
API と inspector-sbomgen
を利用して、 SBOM からスキャンを行うようです。 AWS SDK と AWS CLI にて実行可能で、 Jenkins と TeamCity に関しては、 CI/CD プラグインが用意されているようです。
We provide ready-to-use CI/CD plugins for Jenkins and JetBrain’s TeamCity, with more to come. There is also a new API (inspector-scan) and command (inspector-sbomgen) available from our AWS SDKs and AWS Command Line Interface (AWS CLI). This new API allows you to integrate Amazon Inspector in the CI/CD tool of your choice.
API が提供されているので、 CodeBuild や GitHub Actions でも実行可能ですね。
追記
早速、 CodeBuild 上で動かしてみました。
参考
まとめ
以上、速報レベルにはなりますが「拡張イメージスキャンが CI/CD パイプラインに組み込めるようになりました!」でした。
次回は CodeBuild に実際に組み込んでみようと思います!この記事がどなたかの参考になれば幸いです。
以上、AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!